package com.common.sdk.net.download.interfaces;

import java.util.HashMap;
import java.util.List;

import com.common.sdk.net.download.callback.interfaces.IDownloadCallback;
import com.common.sdk.net.download.request.model.DownloadInfo;

public interface IDownloadBuilder {

    public void initialization();

    /**
     * Often you want to allow a service to call back to its clients. This shows
     * how to do so, by registering a callback interface with the service.
     */
    public void registerCallback(IDownloadCallback cb);

    /**
     * Remove a previously registered callback interface.
     */
    public void unregisterCallback(IDownloadCallback cb);

    /**
     * 增加下载任务
     */
    public void deleteAndAddDownloadItem(DownloadInfo downloadInfo);

    /**
     * 增加下载任务
     */
    public void addDownloadItem(DownloadInfo downloadInfo);

    /**
     * 增加忽略空间40%和不足1G的下载任务
     */
    public void addDownloadItem(DownloadInfo downloadInfo, boolean isSdEnableDownload);

    /**
     * 批量增加下载任务
     */
    public void addDownloadList(List<? extends DownloadInfo> downloadInfo);

    /**
     * 暂停下载条目 下载暂停 重新开始的时候变为开始状态
     */
    public void pauseDownloadItem(DownloadInfo downloadInfo);

    /**
     * 批量暂停下载条目
     */
    public void pauseDownloadList(List<? extends DownloadInfo> downloadInfo);

    /**
     * 开始下载条目  恢复
     */
    public void startDownloadItem(DownloadInfo downloadInfo);

    /**
     * 因SD卡空间不足引起的停止，开始下载条目  恢复
     */
    public void startDownloadItem(DownloadInfo downloadInfo, boolean isDownload);

    /**
     * 批量开始下载条目
     */
    public void startDownloadList(List<? extends DownloadInfo> downloadInfo);

    /**
    * 停止下载条目
    */
    public void stopDownloadingItem(DownloadInfo downloadInfo);

    /**
     * 批量停止下载条目
     */
    public void stopDownloadList(List<? extends DownloadInfo> downloadInfo);

    /**
     * 删除下载
     */
    public void deleteDownloadItem(DownloadInfo downloadInfo);

    /**
    * 批量删除下载
    */
    public void deleteDownloadList(List<? extends DownloadInfo> downloadInfo);

    /**
     * 获取下载列表 clone 出来的。不能操作
     */
    public List<DownloadInfo> getDownloadingList();

    /**
     * 获取下载完成列表 包括下载中。下载暂停。下载停止   clone 出来的。不能操作
     */
    public List<DownloadInfo> getDownloadedList();

    /**
     * 获取下载apk除外的文件
     * @return
     */
    public HashMap<String, DownloadInfo> getDownloadGeneral();

    /**
     * 重新启动所有失败任务
     */
    public void restartAllStopTasks();

    /**
     * 重新启动所有因SD空间不足的失败任务
     */
    public void restartAllSDStopTasks(boolean isSdEnableDownload);

    /**
     * 重新启动所有暂停任务
     */
    public void restartAllPauseTasks();

    /**
     * 重新启动所有任务
     */
    public void restartAllTasks();

    /**
     * 暂停所有下载任务
     */
    public void pauseAllDownloadingTasks();

    /**
     * 停止所有下载任务
     */
    public void stopAllDownloadingTasks();

}
